home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / dosutils / sense13b.zip / SETSENSE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-02-17  |  8KB  |  325 lines

  1. program SetSense;
  2.  
  3. {
  4. ┌───────────────────────────────────────────────────────────────────────────┐
  5. │Mouse sensitivity switcher (SetSense v1.3b) Copyright (c) 1996 by Virtuoso.│
  6. │                                                                           │
  7. │  20/01/96 (1.0a) - implementation.                                        │
  8. │  28/01/96 (1.1b) - rewrite as it didn't work with SIRDOOM :(              │
  9. │  30/01/96 (1.1c) - new version.                                           │
  10. │  06/02/96 (1.2c) - added new coding for redefining our keys.              │
  11. │  17/02/96 (1.3b) - added new coding for changing the sensitivity level.   │
  12. └───────────────────────────────────────────────────────────────────────────┘
  13. }
  14.  
  15. uses
  16.   dos;
  17.  
  18. const
  19.   cVersion: string = 'Mouse sensitivity switcher (SetSense v1.3b), Copyright (c) 1996 by Virtuoso.';
  20.  
  21.   nMultiplexID:    byte = $C0;
  22.   nInstallCheck:   byte = $FF;
  23.   nGetTablePtr:    byte = $FE;
  24.   nSetIncreaseKey: byte = $FD;
  25.   nSetDecreaseKey: byte = $FC;
  26.  
  27.   cParameterLine: string = chr(255);
  28.  
  29.   aKeys: array[$01..$57] of string =
  30.      ( 'Esc', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 
  31.        'Backspace', 'Tab', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 
  32.        '[', ']', 'Enter', 'Ctrl', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 
  33.        'L', ';', '''', '`', 'Left Shift', '\', 'Z', 'X', 'C', 'V', 'B', 'N',
  34.        'M', ',', '.', '/', 'Right Shift', 'Grey*', 'Alt', 'SpaceBar', 
  35.        'CapsLock', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 
  36.        'F10', 'NumLock', 'ScrollLock', 'Home', 'UpArrow', 'PgUp', 'Grey-', 
  37.        'LeftArrow', 'Keypad 5', 'RightArrow', 'Grey+', 'End', 'DownArrow', 
  38.        'PgDn', 'Ins', 'Del', 'SysRq', 'left \', 'F11', 'F12');
  39.  
  40. var
  41.   r: registers;
  42.   nHS, nVS: byte;
  43.   n: integer;
  44.   nLevel: byte;
  45.   nIncKey, nDecKey: byte;
  46.  
  47.  
  48. function IsParameter(cSearchStr: string): integer;
  49.  
  50. var
  51.   n: integer;
  52.  
  53. begin
  54.   if cParameterLine = chr(255) then
  55.   begin
  56.     cParameterLine := '';
  57.     for n := 1 to paramcount do
  58.       cParameterLine := cParameterLine + paramstr(n);
  59.   end;
  60.  
  61.   IsParameter := pos(cSearchStr, cParameterLine);
  62. end;
  63.  
  64.  
  65. procedure GetSensitivity(nPos: integer; var nHS, nVS: byte);
  66.  
  67. var
  68.   cHS, cVS: string[3];
  69.  
  70. begin
  71.   cHS := '';
  72.   while (cParameterLine[nPos] in ['0'..'9']) and (length(cHS) < 3) do
  73.   begin
  74.     cHS := cHS + cParameterLine[nPos];
  75.     inc(nPos);
  76.   end;
  77.  
  78.   { ignore the comma }
  79.   inc(nPos);
  80.  
  81.   cVS := '';
  82.   while (cParameterLine[nPos] in ['0'..'9']) and (length(cVS) < 3) do
  83.   begin
  84.     cVS := cVS + cParameterLine[nPos];
  85.     inc(nPos);
  86.   end;
  87.  
  88.   { store horizontal and vertical speed }
  89.   val(cHS, nHS, nPos);
  90.   val(cVS, nVS, nPos);
  91. end;
  92.  
  93.  
  94. function GetLevel(nPos: integer): byte;
  95.  
  96. var
  97.   cLevel: string[1];
  98.   nLevel: byte;
  99.  
  100. begin
  101.   cLevel := cParameterLine[nPos];
  102.   val(cLevel, nLevel, nPos);
  103.   GetLevel := nLevel;
  104. end;
  105.  
  106.  
  107. procedure SetMouseSensitivity(nHS, nVS: byte);
  108.  
  109. var
  110.   r: registers;
  111.  
  112. begin
  113.   r.AX := $001B;
  114.   intr($33, r);
  115.  
  116.   r.BX := nHS;
  117.   r.CX := nVS;
  118.  
  119.   r.AX := $001A;
  120.   intr($33, r);
  121. end;
  122.  
  123.  
  124. function GetScanCode(nPos: integer): byte;
  125.  
  126. var
  127.   cKey: string[3];
  128.   nKey: byte;
  129.  
  130. begin
  131.   cKey := '';
  132.   while (cParameterLine[nPos] in ['0'..'9']) and (length(cKey) < 2) do
  133.   begin
  134.     cKey := cKey + cParameterLine[nPos];
  135.     inc(nPos);
  136.   end;
  137.   val(cKey, nKey, nPos);
  138.  
  139.   GetScanCode := nKey;
  140. end;
  141.  
  142.  
  143. procedure SetIncreaseKey(nKey: byte);
  144.  
  145. var
  146.   r: registers;
  147.  
  148. begin
  149.   r.AH := nMultiplexID;
  150.   r.AL := nSetIncreaseKey;
  151.   r.CL := nKey;
  152.  
  153.   intr($2F, r);
  154. end;
  155.  
  156.  
  157. procedure SetDecreaseKey(nKey: byte);
  158.  
  159. var
  160.   r: registers;
  161.  
  162. begin
  163.   r.AH := nMultiplexID;
  164.   r.AL := nSetDecreaseKey;
  165.   r.CL := nKey;
  166.  
  167.   intr($2F, r);
  168. end;
  169.  
  170.  
  171. begin
  172.   writeln(cVersion);
  173.   writeln;
  174.  
  175.   r.AH := nMultiplexID;
  176.   r.AL := nInstallCheck;
  177.   intr($2F, r);
  178.  
  179.   if not ((r.AH = nInstallCheck) and (r.AL = nMultiplexID)) then
  180.   begin
  181.     writeln('SenseTSR is not installed!');
  182.     halt(1);
  183.   end;
  184.  
  185.   for n := 1 to 26 do
  186.     if cVersion[n] <> char(mem[r.es:r.si]) then
  187.       begin
  188.         writeln('SenseTSR is not installed!');
  189.         halt(1);
  190.       end
  191.     else
  192.       inc(r.si);
  193.  
  194.   r.AH := nMultiplexID;
  195.   r.AL := nGetTablePtr;
  196.   intr($2F, r);
  197.  
  198.   if IsParameter('/1=') > 0 then
  199.   begin
  200.     GetSensitivity(IsParameter('/1=') + 3, nHS, nVS);
  201.  
  202.     { store horizontal and vertical speed }
  203.     mem[r.DS:r.DX]   := nHS;
  204.     mem[r.DS:r.DX+1] := nVS;
  205.   end;
  206.  
  207.   if IsParameter('/2=') > 0 then
  208.   begin
  209.     GetSensitivity(IsParameter('/2=') + 3, nHS, nVS);
  210.  
  211.     { store horizontal and vertical speed }
  212.     mem[r.DS:r.DX+2] := nHS;
  213.     mem[r.DS:r.DX+3] := nVS;
  214.   end;
  215.  
  216.   if IsParameter('/3=') > 0 then
  217.   begin
  218.     GetSensitivity(IsParameter('/3=') + 3, nHS, nVS);
  219.  
  220.     { store horizontal and vertical speed }
  221.     mem[r.DS:r.DX+4] := nHS;
  222.     mem[r.DS:r.DX+5] := nVS;
  223.   end;
  224.  
  225.   if IsParameter('/4=') > 0 then
  226.   begin
  227.     GetSensitivity(IsParameter('/4=') + 3, nHS, nVS);
  228.  
  229.     { store horizontal and vertical speed }
  230.     mem[r.DS:r.DX+6] := nHS;
  231.     mem[r.DS:r.DX+7] := nVS;
  232.   end;
  233.  
  234.   if IsParameter('/5=') > 0 then
  235.   begin
  236.     GetSensitivity(IsParameter('/5=') + 3, nHS, nVS);
  237.  
  238.     { store horizontal and vertical speed }
  239.     mem[r.DS:r.DX+8] := nHS;
  240.     mem[r.DS:r.DX+9] := nVS;
  241.   end;
  242.  
  243.   if IsParameter('/6=') > 0 then
  244.   begin
  245.     GetSensitivity(IsParameter('/6=') + 3, nHS, nVS);
  246.  
  247.     { store horizontal and vertical speed }
  248.     mem[r.DS:r.DX+10] := nHS;
  249.     mem[r.DS:r.DX+11] := nVS;
  250.   end;
  251.  
  252.   if IsParameter('/7=') > 0 then
  253.   begin
  254.     GetSensitivity(IsParameter('/7=') + 3, nHS, nVS);
  255.  
  256.     { store horizontal and vertical speed }
  257.     mem[r.DS:r.DX+12] := nHS;
  258.     mem[r.DS:r.DX+13] := nVS;
  259.   end;
  260.  
  261.   if IsParameter('/8=') > 0 then
  262.   begin
  263.     GetSensitivity(IsParameter('/8=') + 3, nHS, nVS);
  264.  
  265.     { store horizontal and vertical speed }
  266.     mem[r.DS:r.DX+14] := nHS;
  267.     mem[r.DS:r.DX+15] := nVS;
  268.   end;
  269.  
  270.   if IsParameter('/9=') > 0 then
  271.   begin
  272.     GetSensitivity(IsParameter('/9=') + 3, nHS, nVS);
  273.  
  274.     { store horizontal and vertical speed }
  275.     mem[r.DS:r.DX+16] := nHS;
  276.     mem[r.DS:r.DX+17] := nVS;
  277.   end;
  278.  
  279.   if IsParameter('/L=') > 0 then
  280.   begin
  281.     nLevel := GetLevel(IsParameter('/L=') + 3);
  282.  
  283.     if nLevel in [1..9] then
  284.     begin
  285.       { store sensitivity level }
  286.       mem[r.DS:r.DX-1] := nLevel;
  287.  
  288.       nHS := mem[r.DS:r.DX + ((nLevel - 1) * 2)];
  289.       nVS := mem[r.DS:r.DX + ((nLevel - 1) * 2)+1];
  290.  
  291.       SetMouseSensitivity(nHS, nVS);
  292.     end;
  293.   end;
  294.  
  295.   if IsParameter('/I=') > 0 then
  296.   begin
  297.      nIncKey := GetScanCode(IsParameter('/I=') + 3);
  298.      SetIncreaseKey(nIncKey);
  299.   end;
  300.  
  301.   if IsParameter('/D=') > 0 then
  302.   begin
  303.      nIncKey := GetScanCode(IsParameter('/D=') + 3);
  304.      SetDecreaseKey(nIncKey);
  305.   end;
  306.  
  307.   writeln( '1 = ', mem[r.DS:r.DX]   , ', ', mem[r.DS:r.DX+1]);
  308.   writeln( '2 = ', mem[r.DS:r.DX+2] , ', ', mem[r.DS:r.DX+3]);
  309.   writeln( '3 = ', mem[r.DS:r.DX+4] , ', ', mem[r.DS:r.DX+5]);
  310.   writeln( '4 = ', mem[r.DS:r.DX+6] , ', ', mem[r.DS:r.DX+7]);
  311.   writeln( '5 = ', mem[r.DS:r.DX+8] , ', ', mem[r.DS:r.DX+9]);
  312.   writeln( '6 = ', mem[r.DS:r.DX+10], ', ', mem[r.DS:r.DX+11]);
  313.   writeln( '7 = ', mem[r.DS:r.DX+12], ', ', mem[r.DS:r.DX+13]);
  314.   writeln( '8 = ', mem[r.DS:r.DX+14], ', ', mem[r.DS:r.DX+15]);
  315.   writeln( '9 = ', mem[r.DS:r.DX+16], ', ', mem[r.DS:r.DX+17]);
  316.   writeln;
  317.  
  318.   writeln('Increase key: ', aKeys[mem[r.DS:r.DX+18]], ' (', mem[r.DS:r.DX+18], ').');
  319.   writeln('Decrease key: ', aKeys[mem[r.DS:r.DX+19]], ' (', mem[r.DS:r.DX+19], ').');
  320.   writeln;
  321.  
  322.   writeln('Current sensitivity level is ', mem[r.DS:r.DX-1], '.');
  323.   writeln;
  324. end.
  325.